﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml;
using System.Collections;
using System.Diagnostics;

namespace task_runner
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
			PrjProperty.Init();
			PrjProperty.Logs.Add("Запуск программы " + PrjProperty.Version);
			PrjProperty.Logs.Add(DateTime.Now.ToString());
			PrjProperty.LocalPath = System.IO.Directory.GetCurrentDirectory();
			PrjProperty.Logs.Add("Загрузка параметров успешна");
			PrjProperty.Logs.Add("Имя клиента");
			timer1.Enabled = true;
			PrjProperty.Logs.Add("Запущен механизм автоматического ожидания событий");

			DisplayLog();
		}

		private void Form1_Load(object sender, EventArgs e)
		{
			PrjProperty.LoadConfig("task-runner.config.xml");
			PrjProperty.LoadConfig("task-runner.params.xml");
		}

		/// <summary>
		/// Получить Список файлов в папке
		/// </summary>
		public bool GetFilesTaskList()
		{

			string[] filePaths = Directory.GetFiles(PrjProperty.ServerPath);
			//Creating a new List<T> of type <string>
			PrjProperty.FilesTaskList = new List<string>(filePaths.Length);
			bool res = filePaths.Length > 0 ? true : false;

			if (res)
			{
				//AddRange is a method of List<T> objects that enables the conversion.
				//We just need to pass the reference to the array.
				PrjProperty.FilesTaskList.AddRange(filePaths);
			}
			return res;
		}


		public void DisplayList()
		{
			listBox1.Items.Clear();
			foreach (Task task in PrjProperty.TaskList)
			{
				listBox1.Items.Add(task.Name);
				foreach (TskCommand taskcmd in task.Commands)
				{
					listBox1.Items.Add("	" + taskcmd.TypeCmd + ":" );
				}
			}
		}

		public void DisplayLog()
		{
			listBoxLog.Items.Clear();

			int maxlog = PrjProperty.Logs.Count > 10 ? 10 : PrjProperty.Logs.Count;

			for (int norow = 1; norow <= maxlog; norow++)
			{
				listBoxLog.Items.Add(PrjProperty.Logs[PrjProperty.Logs.Count - norow]);
			}
		}

		public void DisplayParams()
		{
			listBoxParams.Items.Clear();
			foreach (Param prm in PrjProperty.Params)
			{
				listBoxParams.Items.Add(prm.Name + ":" + prm.Value);
			}
		}
		public void FindTask()
		{
			PrjProperty.TaskList.Clear();
			if (GetFilesTaskList())
			{
				foreach (string taskfile in PrjProperty.FilesTaskList)
				{
					PrjProperty.LoadXMLrun(taskfile);

					//move in .arc
				}
			}
			PrjProperty.RunTaskAll();
			DisplayList();
		}

		private void timer1_Tick(object sender, EventArgs e)
		{
			FindTask();
			DisplayLog();
			DisplayParams();
		}

		//включение-отключение таймера
		private void checkBox1_CheckedChanged(object sender, EventArgs e)
		{
			timer1.Enabled = checkBox1.Checked;
			if (timer1.Enabled)
				PrjProperty.Logs.Add("Запущен механизм автоматического ожидания событий");
			else
				PrjProperty.Logs.Add("Остановлен механизм автоматического ожидания событий");

		}

		private void button1_Click(object sender, EventArgs e)
		{
			FindTask();
			DisplayLog();
		}
	}
}
